package com.wanxin.wb.common.support.util;

/**
 * feiniu.com Inc.
 * Copyright (c) 2013-2014 All Rights Reserved.
 */
import java.util.Collection;
import java.util.Map;

import org.springframework.util.CollectionUtils;



import com.wanxin.wb.common.support.exception.ErrorCodeConstants;
import com.wanxin.wb.common.support.exception.AssertExceptionHandle;
import com.wanxin.wb.common.support.exception.CodeDesc;



;

/**
 * <B>Description:</B> 判断类，抛出业务异常 <br>
 * <B>Create on:</B> 2014年12月15日 下午2:14:37<br>
 *
 * @author yuan.qin
 * @author 
 * @version 1.0
 */
public class AssertUtil {

	public static final CodeDesc SYS_UNKNOWN_ERROR                     =   CodeDesc.newCodeDesc("A0000", "未知错误");

	/**
	 * <B>Description:</B> <br>
	 * <B>Create on:</B> 2015年3月23日 上午10:06:11<br>
	 *
	 * @param expression
	 *            如果expression值为true不报错
	 * @param code
	 * @param msg
	 * @author 
	 */
	public static void isTrue(final boolean expression, String code, String msg) {
		if (code == null)
			AssertExceptionHandle.handleError(code, msg);
		if (!expression) {
			AssertExceptionHandle.handleError(code, msg);
		}
	}

	/**
	 *
	 * <B>Description:</B>直接断言错误 <br>
	 * <B>Create on:</B> 2015年8月8日 下午4:56:04<br>
	 *
	 * @param codeDesc
	 * @param msg
	 * @author 
	 */
	public static void failed(CodeDesc codeDesc, String msg) {
		if (codeDesc == null)
			codeDesc = SYS_UNKNOWN_ERROR;
		AssertExceptionHandle.handleError(codeDesc, msg);
	}

	/**
	 *
	 * <B>Description:</B>直接断言错误 <br>
	 * <B>Create on:</B> 2015年8月8日 下午4:56:18<br>
	 *
	 * @param codeDesc
	 * @author 
	 */
	public static void failed(CodeDesc codeDesc) {
		if (codeDesc == null)
			codeDesc = SYS_UNKNOWN_ERROR;
		AssertExceptionHandle.handleError(codeDesc);
	}

	public static void failed(String code, String msg) {
		CodeDesc codeDesc =   CodeDesc.newCodeDesc(code, msg);
		AssertExceptionHandle.handleError(codeDesc);
	}

	/**
	 * <B>Description:</B> <br>
	 * <B>Create on:</B> 2015年3月23日 上午10:06:15<br>
	 *
	 * @param expression
	 * @param codeDesc
	 * @author 
	 */
	public static void isTrue(final boolean expression, CodeDesc codeDesc) {
		isTrue(expression, codeDesc.getCode(), codeDesc.getMsg());
	}

	/**
	 * <B>Description:</B> <br>
	 * <B>Create on:</B> 2015年3月23日 上午10:06:11<br>
	 *
	 * @param expression
	 * @param codeDesc
	 * @param msg
	 * @author 
	 */
	public static void isTrue(final boolean expression, CodeDesc codeDesc, String msg) {
		if (codeDesc == null)
			codeDesc = ErrorCodeConstants.SYS_UNKNOWN_ERROR;
		if (!expression) {
			AssertExceptionHandle.handleError(codeDesc, msg);
		}
	}

	/**
	 * <B>Description:</B> <br>
	 * <B>Create on:</B> 2015年3月23日 上午10:06:18<br>
	 *
	 * @param object
	 * @param codeDesc
	 * @param msg
	 * @author 
	 */
	public static void notNull(final Object object, CodeDesc codeDesc,
			String msg) {
		if (object == null) {
			AssertExceptionHandle.handleError(codeDesc, msg);
		}
	}

	public static void notNullOrEmpty(final Object object, String msg) {
		String code = "A001";
		notNullOrEmpty(object, code, msg);
	}

	/**
	 * <B>Description:</B> <br>
	 * <B>Create on:</B> 2015年3月23日 上午10:06:21<br>
	 *
	 * @param object
	 * @param codeDesc
	 * @author 
	 */
	public static void notNull(final Object object, CodeDesc codeDesc) {
		notNull(object, codeDesc, null);
	}

	/**
	 * <B>Description:</B> <br>
	 * <B>Create on:</B> 2015年3月23日 上午10:06:26<br>
	 *
	 * @param object
	 * @param codeDesc
	 * @param msg
	 * @author 
	 */
	public static void notNullOrEmpty(final Object object, CodeDesc codeDesc,
			String msg) {
		notNull(object, codeDesc, msg);
		if ((object instanceof Collection)) {
			if (CollectionUtils.isEmpty((Collection) object)) {
				AssertExceptionHandle.handleError(codeDesc, msg);
			}
		} else {
			if (StringUtils.isEmpty(object.toString())) {
				AssertExceptionHandle.handleError(codeDesc, msg);
			}
		}
	}

	/**
	 * <B>Description:</B> <br>
	 * <B>Create on:</B> 2015年3月23日 上午10:07:31<br>
	 *
	 * @param object
	 * @param codeDesc
	 * @author 
	 */
	public static void notNullOrEmpty(final Object object, CodeDesc codeDesc) {
		notNullOrEmpty(object, codeDesc, null);
	}

	public static void notNullOrEmpty(final Object object, String code,
			String msg) {
		CodeDesc codeDesc =   CodeDesc.newCodeDesc(code, msg);
		notNullOrEmpty(object, codeDesc, null);
	}

	/**
	 * <B>Description:</B> <br>
	 * <B>Create on:</B> 2015年3月23日 上午10:07:45<br>
	 *
	 * @param object
	 * @param codeDesc
	 * @param msg
	 * @author 
	 */
	public static void notNullOrBlank(final Object object, CodeDesc codeDesc,
			String msg) {
		notNull(object, codeDesc, msg);
		if ((object instanceof Collection)) {
			if (CollectionUtils.isEmpty((Collection) object)) {
				AssertExceptionHandle.handleError(codeDesc, msg);
			}
		} else if ((object instanceof Map)) {
			if (CollectionUtils.isEmpty((Map) object)) {
				AssertExceptionHandle.handleError(codeDesc, msg);
			}
		} else {
			if (StringUtils.isBlank(object.toString())) {
				AssertExceptionHandle.handleError(codeDesc, msg);
			}
		}
	}

	/**
	 * <B>Description:</B> <br>
	 * <B>Create on:</B> 2015年3月23日 上午10:07:48<br>
	 *
	 * @param object
	 * @param codeDesc
	 * @author 
	 */
	public static void notNullOrBlank(final Object object, CodeDesc codeDesc) {
		notNullOrBlank(object, codeDesc, null);
	}

}
